package com.service;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dao.WuyeDAO;
import com.modal.PropertyModel;
import com.pojo.Wuye;
import com.util.JwtUtil;
import com.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author: T-bao
 * @Date: 2021-3-26 9:47
 * @Description:
 */
@Service
public class WuyeService extends ServiceImpl<WuyeDAO, Wuye> {

    @Autowired
    private WuyeDAO wuyeDAO;

    /**
     * 根据联系电话查询物业数量
     * @param phone 物业公司负责人联系电话
     * @return
     */
    public Long selectPhone(String phone){
        return wuyeDAO.selectCount(new QueryWrapper<Wuye>().eq("phone",phone));
    }

    /**
     * 根据联系电话和物业ID查询物业数量
     * @param phone 物业公司负责人联系电话
     * @param id    物业ID
     * @return
     */
    public Long selectPhoneID(String phone,String id){
        return wuyeDAO.selectCount(new QueryWrapper<Wuye>().eq("phone",phone).eq("id",id));
    }

    /**
     * 根据物业编码查询物业数量
     * @param wyCode    物业编码
     * @return
     */
    public Long selectWyCode(Integer wyCode){
        return wuyeDAO.selectCount(new QueryWrapper<Wuye>().eq("wycode",wyCode));
    }
    /**
     * 校验token
     * @param token
     * @return
     */
    public String verifyToken(String token){
        if(StringUtil.isNull(token)) {
            return "登录失效，请重新登录！";
        }
        try{
            JwtUtil.verifyToken(token) ;
        }catch(Exception e) {
            return "登录失效，请重新登录！";
        }
        return null;
    }
    /**
     * 查询状态为启用的物业（制卡员）
     * @return
     */
    public List<Wuye> WuyeStatus(){
        List<Wuye> wuye = wuyeDAO.selectList(new QueryWrapper<Wuye>().eq("status" , 1)) ;
        return wuye;
    }

    /**
     * 查询状态为启用的物业（管理员）
     * @return
     */
    public List<Wuye> Wuyes(){
        List<Wuye> wuye = wuyeDAO.selectList(new QueryWrapper<Wuye>().eq("status" , 1)) ;
        return wuye;
    }

    /**
     * 根据物业ID查询物业
     * @param id    物业ID
     * @return
     */
    public Wuye selectID(String id){
        return wuyeDAO.selectById(id);
    }

    /**
     * 根据物业名称查询物业
     * @param name  物业名称
     * @return
     */
    public Wuye selectByName(String name){
        QueryWrapper query = new QueryWrapper();
        query.eq("wyname",name);
        query.eq("status",1);
        List<Wuye> wuyeList = wuyeDAO.selectList(query);
        if (wuyeList.size() > 0) {
            return  wuyeList.get(0);
        }
        return null;
    }

    /**
     * 根据物业名称查询物业数量
     * @param name  物业名称
     * @return
     */
    public int count(String name){
        return wuyeDAO.count(name);
    }

    /**
     * 根据物业名称查询物业数量
     * @param name  物业名称
     * @return
     */
    public int selectWuyeName(String name){
        return wuyeDAO.selectWuyeName(name);
    }

    /**
     * 根据物业名称和ID查询物业数量
     * @param name  物业名称
     * @return
     */
    public int selectWuyeNameID(String name,String id){
        return wuyeDAO.selectWuyeNameID(name,id);
    }

    /**
     * 分页查询物业
     * @param name  物业名称
     * @param page
     * @param limit
     * @return
     */
    public List<Wuye> selectWuye(String name, int page, int limit){
        return wuyeDAO.selectWuye(name,page,limit);
    }

    /**
     * 根据物业ID修改物业状态
     * @param id    物业ID
     * @return
     */
    public Wuye upStatus(String id){
        Wuye theme = wuyeDAO.selectById(id);
        if (theme==null)
            return theme;

        Integer oldStatus = theme.getStatus();
        if (oldStatus==null)
            oldStatus = 0 ;

        theme.setStatus(1-oldStatus);

        int n = wuyeDAO.updateById(theme);
        return theme;
    }

    public IPage selectWuyeByNameWithPage(String name, Page p) {
        QueryWrapper q = new QueryWrapper();
        if (StringUtil.isNotNull(name))
        {
            q.like("wyname","%"+name+"%");
        }
        IPage result = wuyeDAO.selectPage(p,q);
        return result;
    }

    public String insertWuye(PropertyModel m) {
        Wuye wuye = new Wuye();
        wuye.setId(m.getId());
        wuye.setWyname(m.getWyname());
        wuye.setMessage(m.getMessage());
        wuye.setStatus(m.getStatus());
        wuye.setCreatetime(m.getCreatetime());
        wuye.setAddFlag(m.getAddFlag());
        if (wuyeDAO.insert(wuye) < 1) {
            return "新增物业失败";
        }
        return null;
    }

    public String updateWuye(PropertyModel m){
        Wuye wuye = wuyeDAO.selectById(m.getId());
        if (wuye == null) {
            return "该物业不存在";
        }
        BeanUtil.copyProperties(m, wuye);
        if (wuyeDAO.updateById(wuye) < 1) {
            return "编辑物业失败";
        }
        return null;
    }
}
